package com.example.mybatisdemo.controller;

import com.example.mybatisdemo.entity.dto.UserInfoDto;
import com.example.mybatisdemo.entity.vo.UserInfoVo;
import com.example.mybatisdemo.entity.vo.UserLoginInfoVo;
import com.example.mybatisdemo.interceptor.LoginRequired;
import com.example.mybatisdemo.service.UserInfoService;
import com.example.mybatisdemo.util.CommonResult;
import com.example.mybatisdemo.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
public class UserController {

    @Autowired
    private UserInfoService userInfoService;

    // 新增用户
    @LoginRequired
    @PostMapping("/user")
    public CommonResult save(@RequestBody UserInfoVo userInfoVo) {
        UserInfoDto save = userInfoService.save(userInfoVo);
        return ResultUtil.returnSuccessData(save);
    }

    // 修改用户 (名称 手机号)
    @LoginRequired
    @PutMapping("/user/{id}")
    public void update(@PathVariable("id") Long id,
                       @RequestBody UserInfoVo userInfoVo) {
        userInfoService.update(id, userInfoVo);
    }

    // 删除用户
    @LoginRequired
    @DeleteMapping("/user/{id}")
    public Boolean del(@PathVariable("id") Long id) {
        Boolean success = userInfoService.del(id);
        return success;
    }


    @LoginRequired
    @GetMapping("/user/{id}")
     //获取指定id的用户信息
    public UserInfoDto get(@PathVariable("id") Long id) {
        return userInfoService.get(id);
    }

    // 获取所有用户
    @LoginRequired
    @GetMapping("/user/list")
    public List<UserInfoDto> get() {
        List<UserInfoDto> userInfoDtos = userInfoService.getAll();
        return userInfoDtos;
    }

    // 登录
    @PostMapping("/login")
    public String login(@RequestBody UserLoginInfoVo userLoginInfoVo) {
        // 1、手机号与密码查找用户
        // 2、根据查询情况返回
        // 3、登录成功生成一个uuid 存redis 并返回  key：uuid values：用户id
        if (!userInfoService.existMobile(userLoginInfoVo.getMobile())) {
            return "用户未注册";
        }
        if (userInfoService.findPassByMobile(userLoginInfoVo.getMobile()).equals(userLoginInfoVo.getPass())) {
            return userInfoService.writeInRedis(userLoginInfoVo);
        } else {
            return "密码错误";
        }
    }

    // 退出登录
    // 从redis里面删除 uuid
    @LoginRequired
    @PostMapping("/logout")
    public String logout(@RequestHeader("Token") String token) {
        userInfoService.logout(token);
        return "您已退出";
    }
}
